home *** CD-ROM | disk | FTP | other *** search
- {
- CMDPARSE.PAS
- Command line parameter parsing
- If unit is included, command line is automatically parsed.
-
- }
- unit CmdParse;
- interface
-
- uses
- Strings;
-
- type
-
- CmdPtr = ^CmdRec;
- CmdRec = Record
- CmdParam : String[64]; { 64 char to allow for maximum path length }
- Next : CmdPtr;
- end;
-
- var
- FirstCmd : CmdPtr; { Ptr to first CmdRec or Nil }
- CurrentCmd : CmdPtr; { Ptr to current CmdRec or Nil }
- CmdCnt : Byte; { Total of all entered parameters }
-
- function FirstCmdStr : String;
- { Returns the first parameter entered, or the null ('') string. }
-
- function NextCmdStr : String;
- { Returns the next parameter entered, or the null ('') string. }
-
- function ValidCmdStr(ChkStr : String; CaseCheck : Boolean) : Boolean;
- { Checks all input parameters to see if CmdStr has been input. CaseCheck
- determines if the the search of parameters should be case sensitive. }
-
- procedure ClearCmd;
- { Disposes of all command line pointers except FirstCmd & CurrentCmd
- which are set to Nil }
-
- implementation
- {---------------------------------------------------------------------------}
- var
- Cmd_I : Byte;
-
- function FirstCmdStr : String;
- { Returns the first parameter entered, or the null ('') string. }
- begin
- if FirstCmd <> Nil then begin
- FirstCmdStr := FirstCmd^.CmdParam;
- CurrentCmd := FirstCmd^.Next;
- end else
- FirstCmdStr := '';
- end;
-
- function NextCmdStr : String;
- { Returns the next parameter entered, or the null ('') string. }
- begin
- if CurrentCmd <> Nil then begin
- NextCmdStr := CurrentCmd^.CmdParam;
- CurrentCmd := CurrentCmd^.Next;
- end else
- NextCmdStr := '';
- end;
-
- function ValidCmdStr(ChkStr : String; CaseCheck : Boolean) : Boolean;
- { Checks all input parameters to see if CmdStr has been input. CaseCheck
- determines if the the search of parameters should be case sensitive. }
- var
- CmdStr : String;
- FoundCmd : Boolean;
- begin
- CmdStr := FirstCmdStr;
- FoundCmd := False;
- repeat
- if CaseCheck then
- begin
- if CmdStr = ChkStr then
- FoundCmd := True
- end
- else
- if (StUpCase(CmdStr) = StUpCase(ChkStr)) then
- FoundCmd := True;
- CmdStr := NextCmdStr;
- until CmdStr = '';
- ValidCmdStr := FoundCmd;
- end;
-
- procedure ClearCmd;
- { Disposes of all command line pointers except FirstCmd & CurrentCmd
- which are set to Nil }
- begin
- if FirstCmd <> Nil then
- repeat
- CurrentCmd := FirstCmd^.Next;
- Dispose(FirstCmd);
- FirstCmd := CurrentCmd;
- until FirstCmd = Nil;
- end;
-
- procedure CmdAdd(CmdStr : String);
- { Add a new CmdRec to the list }
- var
- TempCmdPtr : CmdPtr;
- begin
- New(TempCmdPtr);
- if FirstCmd = Nil then
- FirstCmd := TempCmdPtr
- else
- CurrentCmd^.Next := TempCmdPtr;
- TempCmdPtr^.Next := Nil; { Initialize new Next pointer }
- TempCmdPtr^.CmdParam := CmdStr;
- CurrentCmd := TempCmdPtr;
- Inc(CmdCnt);
- end;
-
- procedure ParsePStr(PStr : String);
- { Parse out a ParamStr() into multiple CmdRecs }
- var
- WorkStr : String;
- TempStr : String;
- SpPos: Byte;
- I,L : Byte;
- begin
-
- { translate first - to / }
- if PStr[1] = '-' then
- PStr[1] := '/';
-
- SpPos := Pos('/',Copy(PStr,2,Length(PStr)-1));
- if SpPos > 0 then
- repeat
- CmdAdd(Copy(PStr,1,SpPos));
- PStr := Copy(PStr,SpPos+1,Length(PStr)-SpPos);
- SpPos := Pos('/',Copy(PStr,2,Length(PStr)-1));
- until SpPos = 0;
- CmdAdd(PStr);
- end;
-
- begin
- FirstCmd := Nil;
- CurrentCmd := Nil;
- CmdCnt := 0;
-
- for Cmd_I := 1 to ParamCount do
- ParsePStr(ParamStr(Cmd_I));
- CurrentCmd := FirstCmd;
- end.